package felix.rule.service;

import felix.rule.data.plugin.ComponentDescriptor;
import felix.rule.data.plugin.ComponentType;

import java.util.List;
import java.util.Optional;
import java.util.Set;

public interface ComponentDiscoveryService {

    /**
     * 注册RuleNode组件
     */
    void discoverComponents();

    /**
     * 根据类型获取组件定义
     *
     * @param type
     * @return
     */
    List<ComponentDescriptor> getComponents(ComponentType type);

    /**
     * 根据类型获取组件定义
     *
     * @param types
     * @return
     */
    List<ComponentDescriptor> getComponents(Set<ComponentType> types);

    /**
     * 根据类名获取组件定义
     *
     * @param clazz
     * @return
     */
    Optional<ComponentDescriptor> getComponent(String clazz);

}
